<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>64_构造函数.html</title>
    <script type="text/javascript">

        /**
         * 创建一个构造函数专门用来创建Person对象
         *  构造函数就是一个普通的函数，没什么区别
         *  不同的是构造函数习惯上以大写开头
         * 
         * 构造函数与普通函数的调用方式不同
         *  普通函数直接调用，构造函数是使用new关键字调用
         * 
         * 构造函数的执行流程：
         *  1.立即创建一个新的对象
         *  2.将新建的对象设置为函数的this,在构造函数中可以使用
         *  3.逐行执行函数中的代码
         *  4.将新建的对象返回
        */
        function Person(name,age,gender){
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.sayName = fun;
        }

        /**
         * 将sayName方法抽取出来放在全局作用域中，这样就只有一份，对像中就会进行共用了
        */
        function fun(){
            console.log(this.name);
        }

        var per = new Person("孙悟空",18,"男");
        per.sayName();
        console.log(per);

        /**
         * 使用instanceof检查是否是某个类的实例
         * 所有的对象都是Object,使用instanceof Object都会返回true
        */

        /**
         * this的情况：
         *  1.当以函数调用时，this为window
         *  2.当以方法调用时，this为调用方法的对象
         *  3.当以构造函数调用时，this就是新创建的那个对象
        */
        console.log(per instanceof Person);

    </script>
</head>
<body>
    
</body>
</html>